package main

import (
	"fmt"
	"math"
)

func main() {

	fmt.Println(max(1, 2))
	fmt.Println(testFunc("lalal", 99))
	testFunc1(1, 2, 3)

	funcValue := func(x float64) float64 {
		return math.Sqrt(x)
	}
	fmt.Println(funcValue(9))

	//引用传递, 传入指针
	x := 1
	//取地址
	add1(&x)

	//x=2 改变了传入的值
	fmt.Println("x=", x)

	//空白标识符, 不需要的结果可以用_接
	value1, _ := testFunc("111", 2)
	fmt.Println(value1)

	//defer 函数
	/*
		即延迟（defer）语句，延迟语句被用于执行一个函数调用，
		在这个函数之前，延迟语句返回。可以用于关闭函数资源等操作
	*/
	testDeferFuc()

}

func testDeferFuc() {
	a := 5
	defer println(a)
	a = 10
	fmt.Println("a=", a)
}

func add1(a *int) {
	*a = *a + 1
}

func max(num1, num2 int) int {
	if num1 > num2 {
		return num1
	} else {
		return num2
	}
}

// 函数可以有多个返回值
func testFunc(num1 string, num2 int) (string, int) {
	resultStr := num1 + "方法处理"
	resultint := num2 + 1
	return resultStr, resultint
}

func testFunc1(arg ...int) {
	fmt.Println(arg)
}

func testFunc2(x float64) float64 {
	return math.Sqrt(x)
}
